为您找到与linux find 命令查找文件和文件夹相关的共200个结果:
在进行Linux命令操作的时候,有时会搜索出许多目录,而这些目录又不是我们所需要的,这时就可以将其忽略。下面读文网小编就教大家如何使用find命令忽略子目录。
使用find命令在linux系统中查找文件时,有时需要忽略某些目录,可以使用 -prune 参数来进行过滤。
不过必须注意:要忽略的路径参数要紧跟着搜索的路径之后,否则该参数无法起作用。
例如:指定搜索/home/zth目录下的所有文件,但是会忽略/home/zth/astetc的路径:
代码如下:
find /home/zth -path “/home/zth/astetc” -prune -o -type f -print
按照文件名来搜索则为:
代码如下:
find /home/zth -path “/home/zth/astetc” -prune -o -type f -name “cdr_*.conf” -print
要忽略两个以上的路径如何处理?
代码如下:
find /home/zth /( -path “/home/zth/astetc” -o -path “/home/zth/etc” /) -prune -o -type f -print
find /home/zth /( -path “/home/zth/astetc” -o -path “/home/zth/etc” /) -prune -o -type f -name “cdr_*.conf” -print
注意:/( 和/) 前后都有空格。
查找某个文件包含内容,以下语句可以解决目录带空格的问题:
代码如下:
find 。/ -name “mysql*” -print0 |xargs -0 grep “SELECT lead_id FROM vicidial_list where vendor_lead_code”
如果目录不带空格,可以这样:
代码如下:
find 。/ -name “mysql*” |xargs grep “SELECT lead_id FROM vicidial_list where vendor_lead_code”
上面就是Linux下使用find命令查找文件时忽略子目录的方法介绍了,如果你需要用到相关操作,而又对find命令的使用不是很熟悉的话,不妨来了解下本文,希望对你有所帮助。
浏览量:2
下载量:0
时间:
which指令会在环境变量$PATH设置的目录里查找符合条件的文件。那么Linux怎么用which命令查找文件?下面跟着读文网小编一起去了解下吧。
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
1.命令格式:
which 可执行文件名称
2.命令功能:
which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
3.命令参数:
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p 与-n参数相同,但此处的包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息
4.使用实例:
实例1:查找文件、显示命令路径
命令:
which lsmod
输出:
[root@localhost ~]# which pwd
/bin/pwd
[root@localhost ~]# which adduser
/usr/sbin/adduser
[root@localhost ~]#
说明:
which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!
实例2:用 which 去找出 which
命令:
which which
输出:
[root@localhost ~]# which which
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde’
/usr/bin/which
[root@localhost ~]#
说明:
竟然会有两个 which ,其中一个是 alias 这就是所谓的『命令别名』,意思是输入 which 会等於后面接的那串命令!
实例3:找出 cd 这个命令
命令:
which cd
输出:
说明:
cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是bash 内建的命令! 但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的!
上面就是Linux下which命令的用法介绍了,Linux下的查找命令不止which命令这一种,还有其他的命令可用于查找文件位置,不同命令其用法也略有不同。
看过“Linux怎么用which命令查找文件 ”
浏览量:4
下载量:0
时间:
find是个使用频率比较高的命令。常常用它在系统特定目录下,查找具有某种特征【名字类型属主权限等】的文件。读文网小编分享了Linux find命令常见用法,希望大家喜欢。
·find path -option [ -print ] [ -exec -ok command ] {} ;
find命令的参数;
pathname: find命令所查找的目录路径。例如用。来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为‘command’ { } ;,注意{ }和;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
#-print 将查找到的文件输出到标准输出
#-exec command {} ; —–将查到的文件执行command操作,{} 和 ;之间有空格
#-ok 和-exec相同,只不过在操作前要询用户
例:find 。 -name .svn | xargs rm -rf
====================================================
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查GIN: 0px“》
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %; #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune #忽略某个目录
=====================================================
$find ~ -name ”*.txt“ -print #在$HOME中查.txt文件并显示
$find 。 -name ”*.txt“ -print
$find 。 -name ”[A-Z]*“ -print #查以大写字母开头的文件
$find /etc -name ”host*“ -print #查以host开头的文件
$find 。 -name ”[a-z][a-z][0–9][0–9].txt“ -print #查以两个小写字母和两个数字开头的txt文件
$find 。 -perm 755 -print
$find 。 -perm -007 -exec ls -l {} ; #查所有用户都可读写执行的文件同-perm 777
$find 。 -type d -print
$find 。 ! -type d -print
$find 。 -type l -print
$find 。 -size +1000000c -print #查长度大于1Mb的文件
$find 。 -size 100c -print # 查长度为100c的文件
$find 。 -size +10 -print #查长度超过期作废10块的文件(1块=512字节)
$cd /
$find etc home apps -depth -print | cpio -ivcdC65536 -o /dev/rmt0
$find /etc -name ”passwd*“ -exec grep ”cnscn“ {} ; #看是否存在cnscn用户
$find 。 -name ”yao*“ | xargs file
$find 。 -name ”yao*“ | xargs echo ”“ 》 /tmp/core.log
$find 。 -name ”yao*“ | xargs chmod o-w
======================================================
find -name april* 在当前目录下查找以april开始的文件
find -name april* fprint file 在当前目录下查找以april开始的文件,并把结果输出到file中
find -name ap* -o -name may* 查找以ap或may开头的文件
find /mnt -name tom.txt -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find /mnt -name t.txt ! -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find /tmp -name wa* -type l 在/tmp下查找名为wa开头且类型为符号链接的文件
find /home -mtime -2 在/home下查最近两天内改动过的文件
find /home -atime -1 查1天之内被存取过的文件
find /home -mmin +60 在/home下查60分钟前改动过的文件
find /home -amin +30 查最近30分钟前被存取过的文件
find /home -newer tmp.txt 在/home下查更新时间比tmp.txt近的文件或目录
find /home -anewer tmp.txt 在/home下查存取时间比tmp.txt近的文件或目录
find /home -used -2 列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find /home -user cnscn 列出/home目录内属于用户cnscn的文件或目录
find /home -uid +501 列出/home目录内用户的识别码大于501的文件或目录
find /home -group cnscn 列出/home内组为cnscn的文件或目录
find /home -gid 501 列出/home内组id为501的文件或目录
find /home -nouser 列出/home内不属于本地用户的文件或目录
find /home -nogroup 列出/home内不属于本地组的文件或目录
find /home -name tmp.txt -maxdepth 4 列出/home内的tmp.txt 查时深度最多为3层
find /home -name tmp.txt -mindepth 3 从第2层开始查
find /home -empty 查找大小为0的文件或空目录
find /home -size +512k 查大于512k的文件
find /home -size -512k 查小于512k的文件
find /home -links +2 查硬连接数大于2的文件或目录
find /home -perm 0700 查权限为700的文件或目录
find /tmp -name tmp.txt -exec cat {} ;
find /tmp -name tmp.txt -ok rm {} ;
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
查当前目录下的所有普通文件
# find 。 -type f -exec ls -l {} ;
-rw-r–r– 1 root root 34928 2003-02-25 。/conf/httpd.conf
-rw-r–r– 1 root root 12959 2003-02-25 。/conf/magic
-rw-r–r– 1 root root 180 2003-02-25 。/conf.d/README
查当前目录下的所有普通文件,并在- e x e c选项中使用ls -l命令将它们列出
=================================================
在/ l o g s目录中查找更改时间在5日以前的文件并删除它们:
$ find logs -type f -mtime +5 -exec -ok rm {} ;
=================================================
查询当天修改过的文件
[root@book class]# find 。/ -mtime -1 -type f -exec ls -l {} ;
=================================================
查询文件并询问是否要显示
[root@book class]# find 。/ -mtime -1 -type f -ok ls -l {} ;
《 ls … 。/classDB.inc.php 》 ? y
-rw-r–r– 1 cnscn cnscn 13709 1月 12 12:22 。/classDB.inc.php
[root@book class]# find 。/ -mtime -1 -type f -ok ls -l {} ;
《 ls … 。/classDB.inc.php 》 ? n
[root@book class]#
=================================================
查询并交给awk去处理
[root@book class]# who | awk ’{print $1”“$2}’
cnscn pts/0
=================================================
awk—grep—sed
[root@book class]# df -k | awk ‘{print $1}’ | grep -v ’none’ | sed s”//dev///g“
文件系统
sda2
sda1
[root@book class]# df -k | awk ‘{print $1}’ | grep -v ’none’
文件系统
/dev/sda2
/dev/sda1
1)在/tmp中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR”,最后打印出所有包含“SYSCALL_VECTOR”的文件名
A) find /tmp -name “*.h” | xargs -n50 grep SYSCALL_VECTOR
B) grep SYSCALL_VECTOR /tmp/*.h | cut -d’:‘ -f1| uniq 》 filename
C) find /tmp -name “*.h” -exec grep “SYSCALL_VECTOR” {} ; -print
2)find / -name filename -exec rm -rf {} ;
find / -name filename -ok rm -rf {} ;
3)比如要查找磁盘中大于3M的文件:
find 。 -size +3000k -exec ls -ld {} ;
4)将find出来的东西拷到另一个地方
find *.c -exec cp ‘{}’ /tmp ‘;’
如果有特殊文件,可以用cpio,也可以用这样的语法:
find dir -name filename -print | cpio -pdv newdir
6)查找2004-11-30 16:36:37时更改过的文件
# A=`find 。/ -name “*php”` | ls -l –full-time $A 2》/dev/null | grep “2004-11-30 16:36:37”
Linux-all, Linux | No Comments »
find 实例
要在/usr/linux中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR“,最后打印出所有包含”SYSCALL_VECTOR“的文件名,有以下几种方法实现
find /usr/linux -name ”*.h“ | xargs -n50 grep SYSCALL_VECTOR
grep SYSCALL_VECTOR /usr/linux/*.h | cut -d’:’ -f1 | uniq 》 filename
find /usr/linux -name ”*.h“ -exec grep ”SYSCALL_VECTOR“ {} ; -print
我用find / -name filename| rm -rf,不成功,请问为什么不成功?
find / -name filename -exec rm -rf {} ;
find 。 -name filename |rm -rf试一下{} 表示你找出来的结果。
; 则相当于“宪法”,没什么说头,就是这么规定的,在 -exec 后面需要一个表示该命令终结的的符号。可以在 man find 中找到答案。
要让rm识别find的结果,如下:
find / -name filename |xargs rm -rf
之所以find 。 -name filename |rm -rf不通过,是因为rm命令不接受从标准输入传过来的指令
查找含特定字符串的文件
例如查找当前目录下含有”the string you want find…“字符串的文件:
$find 。 -type f -exec grep “the string you want find…” {} ; -print
从根目录开始查tmpfile,一旦查到马上删除
find / -name ”tmpfile“ -exec rm {} ;
find 的perm问题
请问一下以下命令什么意思?关键是那个数字前的-,其他都还知道
find -name ”.*“ -perm -007
我知道
find -name ”.*“ -perm 755
这个是用来查找权限位为755的隐藏文件
噢,对了还有,我上边的命令都省略了find的pathname参数 find默认是查找当前工作目录的吗?
如果我用 -ok 替代 -exec, 那么还需要加上 {} ; 吗?
这个已经清楚,仍然需要,因为 -ok 只是 -exec 的提示模式,它只是多了一个确认操作的步骤,刚才没有读懂那几句E文的意思 呵呵 不好意思
-007是指查找所有用户都可读、写、执行的文件,要小心呀~~~
解释解释?
find -name ”.*“ -perm -007 和 find -name ”.*“ -perm 777 有区别吗?
-007是怎么来得呢?
不过有一个问题
我用 find 。 -perm -100 会列出当前目录 。 , 这是为什么呢?
下面引用由explover在 2002/10/01 06:15am 发表的内容:
-007是指查找所有用户都可读、写、执行的文件,要小心呀~~~
-007是查找含其它用户(不同组,非属主)可读,写,执行的文件。并不一定要同组可读写,-是指最少权限为007.
下面引用由一颗小白菜在 2002/10/01 10:16am 发表的内容:
OK了, 呵呵
不过有一个问题
我用 find 。 -perm -100 会列出当前目录 。 , 这是为什么呢?
这种方法不会准确的找出目录的。 -100是指权限至少是属主可运行。
在unix系统下,你可以拥有对目录文件的执行权你才可以进入一个目录。这便是目录文件被列出的原因。
find 。 -perm -001 -print找到往往是目录文件。
我的意思当然不是使用这种方法来找目录,只不过不明白其中的 -100 意义了
那以此类推,是不是 -010是指权限至少是owner同组可执行的吗?也就是说其实这里的010和-是分开的,-表示一个至少的意思,而且010才是真正用来描述权限位的?
这样子就明白了 谢谢你噢
将find出来的东西拷到另一个地方?
find *.c -exec cp ‘{}’ /tmp ‘;’
如果有特殊文件,可以用cpio,也可以用这样的语法:
find dir -name filename -print | cpio -pdv newdir
找出磁盘中某个大小范围内的文件
比如要查找磁盘中大于3M的文件:
find 。 -size +3000k -exec ls -ld {} ;
如何用find查找某一天更改的文件?
可以使用这一行命令来实现:
A=`find ~ -print` | ls -l –full-time $A 2》/dev/null | grep ”Jun 27“ | grep 1998
使用find 命令查找某个时间段的shell怎么写。比如11点到12点的。thanks
创建一个脚本judgetime,内容如下:
ls -l $*|awk ‘{split($8,hour,”:“);if((hour[1]》23 || hour[1] 《 1)&&hour[1]《24)print}’
到要查找的目录下,运行
find 。/ -name ”*“ -exec judgetime {} ;
注意时间格式为24小时制。
thank you ,如果我要精确到分钟呢
touch -t 04241112 starttemp #精确到12分钟
touch -t 04241220 endtemp #截止到12点20
find [dir] -newer starttemp -a ! -newer endtemp -exec ls -l {} ;
newer?
那昨天12:10文件如何呢?
每天执行的时候,用当天的日期和时间戳替换一下不就行了吗?
我不知道他是不是把所有的11:00~12:00的都找出来,是不是只执行一次还是每天都执行?
这种情况俺猜想是自己的东西放在哪忘了,只记得当时是深夜了。
有道理!
不愧是斑竹!
不光知道怎么解决问题,还知道在什么情况下出现这类问题,佩服佩服!
问题又出现了。创建这个文件的时候。本来应该是时间的一栏现在写上了2002,而不是12:00.
等到12:00过了吧!
删除指定日期的文件
find 。/ -name 文件名 -exec rm -f {} ;
例:删除当前30天内没用过的文件,用如下命令:
find / -atime +30 -exec rm -f {} ;
我自己试着写了一小段SHELL,也用ll ,grep, rm 几个命令,用起来还差强人意。
对过滤出来的文件名列表中用了一个FOR语句,再执行rm 。现在我想把这段SHELL 扩展一下让它每天定时运行将 n 天前的文件删掉,有没有人能给我一些提示,谢谢!
还有个问题,对于前面那位朋友提到的”find / -atime +30 -exec rm -f {} ;
“方法,我很早就试过几次,不过好像都不太对,参数 -atime n 是查找n天前被访问过的文件,我不明白的是这里的时间参照点是什么,以及这个n天是怎么计算的。
问 题二、对于”ll |cut -f 1“ 这个命令我是不是用错了,我只想取出 ll 中列出的文件名,但用cut -f 命令做不到 ,我只好换用 ll |cut -c 59- 这种方式得到我要的文件名,but it’s a pool idear !我也试过用awk ,好像也不对,看看大家可不可以给我一些小小的提醒,TKS SO MUCH
问题三、如何改变 I结点 的日期格式 我现在的系统显示的格式是:
-rw-r—– 1 msahz01 users 2253 2002年2月 2日 poheader.i
我想把这换成
-rw-rw-rw- 1 house users 2193 Apr 19 2001 hkdisp.p
如何才能做到这点?
awk 应该可以
ll | awk ‘{print $9}’
删除多少天之前的文件
find /yourpath -mtime +31 -exec rm {} ;
find /yourpath -mtime +366 -exec rm {} ;
find中, -ctime, -mtime及其-atime有何区别
请问 -ctime 和 -mtime 有什么关系 ?
如果父目录的 ctime 改变, 那它下面的文件的 ctime 就会自动都改了吗 ?
-ctime 和 -mtime ,-atime 这些信息是存在哪儿呢 ?
我用 -mtime -1 找到了新建或改的文件。
但怎样才能找到一天内 mv 来的文件呢( 它们的时间是原有的时间,早于一天 ) ?
用-newer选项啊。
你可以先touch一个你想要的时间的文件如下:
$ touch -t 08190800 test
$ ls -l test
-rw-r–r– 1 dba other 0 Aug 19 08:00 test
然后
$ find 。 -newer test -print
。
。/.sh_history
$ ls -l .sh_history
-rw——- 1 dba other 154 Aug 20 17:39 .sh_history
用touch可以写出你想要的任何时间的文件,然后用-newer ,! -newer选项即可成功。
1.ctime含inode信息修改的时间.mtime只指文件内容建立或修改的时间。
2 不会。
3.这些信息应该是存在文件系统的超级块里。
我查了书 -ctime 是指 inode 的改变(或称文件的状态改变)。
请问 inode 存了哪些信息 ?
做了些小测试,-mtime 改, -ctime 一定也改。
改文件名, -ctime 也会改。
谁能回答 i-node 存了哪些东西 ?
vi /usr/include/sys/inode.h
班主,我不能 access /usr/include/sys/inode.h 。
摘书如下:
Directories contain directory entries. Each entry contains a file or subdirectory name and an index node reference number (i-node number)。 To increase speed and enhance use of disk space, the data in a file is stored at various locations in the computer’s memory. The i-node contains the addresses used to locate all the scattered blocks of data associated with a file. The i-node also records other information about the file including time of modification and access, access modes, number of links, file owner, and file type.
可我发现 -atime 改了, -ctime 还没改。 why ?
( 我先 cat 一个 ASCII 文件,再用 -atime -1 有它用 -ctime -1 居然没有它。)
着岂不跟 inode 信息改变, ctime 就改矛盾吗?
我不同意你贴出来的那段文章,正如我提到的那样,atime,ctime,mtime是放到超级块里,在sco unix下是一种叫stat的结构。(stat_32),不同的系统文件系统可能不同。
sco 下inode的结构如下:
typedef struct inode
{
struct inode *i_forw; /* inode hash chain */
struct inode *i_back; /* ‘’ */
struct inode *av_forw; /* freelist chain */
struct inode *av_back; /* ‘’ */
int *i_fsptr; /* ”typeless“ pointer to fs dependent */
ino32_t i_number; /* i number, 1-to-1 with dev address */
ushort i_ftype; /* file type = IFDIR, IFREG, etc. */
short i_fstyp; /* File system type */
off_t i_size; /* size of file */
ushort i_uid; /* owner */
ushort i_gid; /* group of owner */
ushort i_flag;
ushort i_want; /* i_flag extension to avoid MP races */
ushort i_count; /* reference count */
short i_nlink; /* directory entries */
dev_t i_rdev; /* Raw device number */
#define i_namtype i_rdev /* i_ftype==IFNAM subtype */
dev_t i_dev; /* device where inode resides */
struct mount *i_mton;/* ptr to mount table entry that */
/* this directory is mounted on */
struct region *i_rp; /* ptr to shared region if any */
struct stdata *i_sp; /* ptr to associated stream */
struct iisem *isem; /* ptr to XENIX semaphores */
struct iisd *isd; /* ptr to XENIX shared data */
} i_un;
#define i_mnton i_un.i_mton /* i_ftype==IFDIR IMOUNT */
#define i_rptr i_un.i_rp /* i_ftype==IFREG || i_ftype==IFBLK */
#define i_sptr i_un.i_sp /* i_ftype==IFCHR || i_ftype==IFIFO */
#define i_sem i_un.isem /* i_ftype==IFNAM && i_namtype==IFSEM */
#define i_sd i_un.isd /* i_ftype==IFNAM && i_namtype==IFSHD */
struct fstypsw *i_fstypp; /* ptr to file system switch FSPTR */
long *i_filocks; /* pointer to filock (structure) list */
unsigned long i_mappages; /* number of pages currently cached */
unsigned long i_vcode; /* read-ahead block save (NFS) */
short i_wcnt; /* write open count or ITEXT count */
struct lockb i_cilock; /* tas to synchronize i_flag changes */
ushort i_rdlocks; /* count of non-exclusive lockers */
} inode_t;
所以,访问一个文件不能改变inode信息。
使用chown, chgrp, chmod命令可以很好的比较mtime和ctime
chown改变一个文件的属主,用ctime可以找到,用mtime便找不到。
试试看。
多谢斑竹! 我是在 Solaris 上面试的。我是对 -ctime 不明白。
试的结果如下:
修改文件,-mtime 改了, -ctime 也会改。
访问文件,-atime 改了, -ctime 没变。
chown, chgrp, chmod,mv, 都会使 -ctime 改变,但不影响 -atime 和 -mtime.
touch 可以改 -mtime and/or -atime,但 touch -a 只改访问时间时,-ctime也改了。
touch -m 改修改时间时,-ctime当然也改了。
好象还有别的很多东西可以令 -ctime 改变, 搞不清楚。
有什么方法可以显示 -mtime,atime,ctime 吗?
可以用 -ctime 来实现对目录的增量文件进行备份或 transfer 吗 ?
多谢!
没有什么工具显示,(可能是俺不知道)
把下面程序里的st_mtime换成st_ctime,或st_atime便可以得到你要的了。
#include
int
main (int argc, char **argv)
{
struct stat buf;
char date[80];
char fname[80];
printf(”Enter filename (with full path) to check mtime : “);
scanf(”%s“,fname);
stat(fname, &buf);
printf (”mtime (in sec) of %s = %ld“, fname, buf.st_mtime);
strcpy(date, ctime((time_t *)&(buf.st_mtime)));
printf (”mtime (in date) of %s = %s“, fname, date);
}
至于文件备份,有什么不可以的么?
mtime ls -l 最近修改文件内容的时间
atime ls -lu 最近访问文件的时间
ctime ls -li 最近文件有所改变的状态 ,如文件修改,属性属主 改变 ,节点 ,链接变化等 ,应该是不拘泥只是时间前后的改变
俺看了ls的帮助,以为只是按ctime或atime排序,显示的时间还是mtime.
仔细比较了一下,ayhan说的是对的。谢谢ayhan.
多谢 ahyan 提示 ! 我在 Solaris 上试过如下:
mtime 用 ls -l 看到
atime 用 ls -lu 看到
ctime 用 ls -lc 看到。 (ls -li 只有 inode number)
摘书如下:
-c Uses time of last modification of the i-node (file
created, mode changed, and so forth) for sorting (-t)
or printing (-l or -n)。
-u Uses time of last access instead of last modification
for sorting (with the -t option) or printing (with the
-l option)。
-i For each file, prints the i-node number in the first
column of the report.
上面就是Linux下find命令的常见用法的介绍了,所有会使用到的find都有提到,初学者如果对find命令不熟悉的话,不妨来详细了解下find命令。
浏览量:5
下载量:0
时间:
find命令主要用于文件的查找,在之前的文章有过详细的介绍,今天读文网小编要给大家介绍的是Linux find命令和xargs命令的配合使用,一起来了解下吧。
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误
错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高; 而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
命令:
代码如下:
find / -name “core” -print | xargs echo “” 》/tmp/core.log
输出:
代码如下:
[root@localhost test]# find / -name “core” -print | xargs echo “” 》/tmp/core.log
[root@localhost test]# cd /tmp
[root@localhost tmp]# ll
总计 16
-rw-r--r-- 1 root root 1524 11-12 22:29 core.log
drwx------ 2 root root 4096 11-12 22:24 ssh-TzcZDx1766
drwx------ 2 root root 4096 11-12 22:28 ssh-ykiRPk1815
drwx------ 2 root root 4096 11-03 07:11 vmware-root
浏览量:3
下载量:0
时间:
Linux系统中查找文件的命令式find,find命令具有强大的功能,能够提供多种查找条件,下面读文网小编就给大家带来Linux中find命令的常见用法汇总,一起来学习下吧。
·find path -option [ -print ] [ -exec -ok command ] {} ;
find命令的参数;
pathname: find命令所查找的目录路径。例如用。来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为‘command’ { } ;,注意{ }和;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
#-print 将查找到的文件输出到标准输出
#-exec command {} ; —–将查到的文件执行command操作,{} 和 ;之间有空格
#-ok 和-exec相同,只不过在操作前要询用户
例:find 。 -name .svn | xargs rm -rf
====================================================
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查GIN: 0px“》
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %; #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune #忽略某个目录
=====================================================
$find ~ -name ”*.txt“ -print #在$HOME中查.txt文件并显示
$find 。 -name ”*.txt“ -print
$find 。 -name ”[A-Z]*“ -print #查以大写字母开头的文件
$find /etc -name ”host*“ -print #查以host开头的文件
$find 。 -name ”[a-z][a-z][0–9][0–9].txt“ -print #查以两个小写字母和两个数字开头的txt文件
$find 。 -perm 755 -print
$find 。 -perm -007 -exec ls -l {} ; #查所有用户都可读写执行的文件同-perm 777
$find 。 -type d -print
$find 。 ! -type d -print
$find 。 -type l -print
$find 。 -size +1000000c -print #查长度大于1Mb的文件
$find 。 -size 100c -print # 查长度为100c的文件
$find 。 -size +10 -print #查长度超过期作废10块的文件(1块=512字节)
$cd /
$find etc home apps -depth -print | cpio -ivcdC65536 -o /dev/rmt0
$find /etc -name ”passwd*“ -exec grep ”cnscn“ {} ; #看是否存在cnscn用户
$find 。 -name ”yao*“ | xargs file
$find 。 -name ”yao*“ | xargs echo ”“ 》 /tmp/core.log
$find 。 -name ”yao*“ | xargs chmod o-w
======================================================
find -name april* 在当前目录下查找以april开始的文件
find -name april* fprint file 在当前目录下查找以april开始的文件,并把结果输出到file中
find -name ap* -o -name may* 查找以ap或may开头的文件
find /mnt -name tom.txt -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find /mnt -name t.txt ! -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find /tmp -name wa* -type l 在/tmp下查找名为wa开头且类型为符号链接的文件
find /home -mtime -2 在/home下查最近两天内改动过的文件
find /home -atime -1 查1天之内被存取过的文件
find /home -mmin +60 在/home下查60分钟前改动过的文件
find /home -amin +30 查最近30分钟前被存取过的文件
find /home -newer tmp.txt 在/home下查更新时间比tmp.txt近的文件或目录
find /home -anewer tmp.txt 在/home下查存取时间比tmp.txt近的文件或目录
find /home -used -2 列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find /home -user cnscn 列出/home目录内属于用户cnscn的文件或目录
find /home -uid +501 列出/home目录内用户的识别码大于501的文件或目录
find /home -group cnscn 列出/home内组为cnscn的文件或目录
find /home -gid 501 列出/home内组id为501的文件或目录
find /home -nouser 列出/home内不属于本地用户的文件或目录
find /home -nogroup 列出/home内不属于本地组的文件或目录
find /home -name tmp.txt -maxdepth 4 列出/home内的tmp.txt 查时深度最多为3层
find /home -name tmp.txt -mindepth 3 从第2层开始查
find /home -empty 查找大小为0的文件或空目录
find /home -size +512k 查大于512k的文件
find /home -size -512k 查小于512k的文件
find /home -links +2 查硬连接数大于2的文件或目录
find /home -perm 0700 查权限为700的文件或目录
find /tmp -name tmp.txt -exec cat {} ;
find /tmp -name tmp.txt -ok rm {} ;
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
浏览量:4
下载量:0
时间:
单纯的了解Linux find命令是不够的,我们还要知道怎么使用它,下面小编从find的例子中给大家介绍下find的用法,希望对初学者能有所帮助。
让我们先从一个简单例子开始。
$ find / -name test
。/backup/ modules/field/modules/test
$
“查找根目录下名称为’test’的文件”, 这条命令会让系统查找所有文件, 包括挂载的文件设备。 这可能需要花费一段时间, 尤其是查找网络共享硬盘。 不过, 我们可以通过参数-mount告诉, 系统忽略挂载设备:
$ find / -mount -name test
find命令格式如下:
find [path] [options] [tests] [actions]
[path]
路径; 应该不难理解。 这里可以使用绝对路径, 也快成使用相对路径。
[options]
参数; 比较常用的参数用:
-depth: 先查找子目录再查看当前目录 -follow: 跟踪查找连接文件 -maxdepths N: 子目录递归最大深度 -mount(or -xdev): 忽略挂载文件
[tests]
条件匹配;
-atime -N/N/+N: 最后一次访问文件的时间在 N天内/N天/N天前 -mtime -N/N/+N: 最后一次修改文件的时间在 N天内/N天/N天前 -name pattern: 与pattern相匹配的文件(包括目录) -newer f1 !f2: 比文件f1新的文件, 比文件f2旧的文件 -type b/d/c/p/l/f: 文件类型为: 块设备/目录/字符设备/管道/链接/文件 -user username: 文件的所有者是username
我们可以通过以下操作符, 将匹配条件 连起来:
-not (!): 方向匹配 -and (-a): 而且 -or (-o): 或者
我们还可以通过括号将一些匹配符号合并。 例如
(-newer -o -name ‘*test’ )
现在举一个稍微有点复杂的例子, 查找当天被访问过或修改过的文件, 文件名包含’python’, 而起文件所有者是’anthony’:
# find / ( -atime -1 -or -mtime -1 ) -and -name ‘*python*’ -and -user ‘anthony’
/home/anthony/svn_code/subversion-1.7.2/subversion/bindings/swig/python
/home/anthony/svn_code/subversion-1.7.2/subversion/bindings/ctypes-python
/home/anthony/python
/home/anthony/python/Python-3.2.2/build/temp.linux-x86_64-3.2/home/anthony/python
/home/anthony/python/Python-3.2.2/Tools/unicode/python-mappings
/home/anthony/.local/lib/python3.2
#
[actions]
操作;
-exec command: 执行命令, 具体介绍见后文。 -ok command: 和-exec一样, 除了命令执行需要用户许可。 -print: 打印文件名 -ls: 列出文件详细信息
现在举例说明-exec command
anthony@z:~$ find -mtime -1 -type f -exec ls -l {} ;
-rw-r--r-- 1 anthony anthony 0 Apr 5 12:04 。/search/search.txt
-rw------- 1 anthony anthony 22997 Apr 5 12:04 。/.viminfo
-rw------- 1 anthony anthony 125 Apr 5 14:25 。/.lesshst
anthony@z:~$
简单地说, -exec或-ok, 将查询到的文件作为参数传递给后面的命令执行, 而参数的位置用{}标识, 即命令中, “{}”替换成find查找出来的文件名, 最后”;”表示结束符。
上面就是Linux find命令的介绍了,从例子中学习find命令效果会比看理论知识会好的多,对于初学者来说,多看例子多动手是很有必要的。
浏览量:4
下载量:0
时间:
作为一种分时的特数操作系统,Linux具备Windows和mac OS与众不同的操作界面和用户体验,虽然它并不是最主流的操作系统,但是它会作为操作系统而得到众多程序开发人员的青睐和熟知。find命令是操作系统环境下进行计算机功能调用的特殊命令,顾名思义,它的作用就是查找,比如查找一些特定的文件。那么Linux环境下的find命令该如何使用呢?读文网小编来告诉大家。
和众多命令相同,如果想要查询不同的文件,就需要使用不同类型的查询参数才能实现。Find命令的查询参数如下:
pathname: find 这个参数能够根据文件的路径进行文件查找,一般来说.表示当前目录路径,/表示系统根目录路径。
-print:使用这个命令进行查找系统会将匹配的文件输出至标准的输出方式显示。
-exec:若使用这个参数进行文件查找,系统会进行特殊的shell命令执行,这个shell命令是参数给出的。
-ok:这个参数的功能和-exec具有相似的查询效果,不过它会给查询增加安全性,并在每一个执行步骤之前给出提示。
浏览量:2
下载量:0
时间:
学过Linux命令的都知道,find命令可用于查找目录文件,今天读文网小编要给大家介绍的是如何使用find命令进行Linux日志的定期迁移,有兴趣的朋友不妨来了解下吧。
linux系统中,使用find命令定期迁移linux日志的方法。
-name:按照文件名进行查找
-perm:按文件权限来查找
-user:按文件的用户主查找
-group:按文件的用户组查找
-type:查找某一类型的文件
b -- 块设备文件
d -- 目录
c -- 字符设备文件
p -- 管道文件
l -- 符号链接文件
f -- 普通文件
-mtime:按照文件的更改时间来查找文件
-n -- 表示文件更改时间距现在n天以内
+n -- 表示文件更改时间距现在n天以前
浏览量:2
下载量:0
时间:
Linux操作很简单,删除文章只需要一些命令就可以完成,那linux下怎么删除文件夹呢?如果删除了文件夹还可以恢复吗?怎么恢复?读文网小编带大家一起来看一下。
我们都知道如果是多个用户而且多个人去的系统,我们删除的文件是很难恢复的,如果是家庭的单机使用的linux,文件误删时候还是可以进行补救的。那该怎么恢复呢?
首先我们运行SecureCRT,远程查看一下操作系统的系统版本号以及文件系统的格式是什么样的。之后我们可以运行系统自动还原的工具debugfs来对我们误删的文件进行修复打开我们被删除文件的分区open/dev/test,然后查看删除文件所在的目录ls -d/root/shill,之后我们查看显示有<>的就是我们需要的文件。
之后执行logdump –I<393289>(尖括号里面的内容更具我们具体的显示输入),这个命令执行完之后我们会看到在我们的额屏幕上会出现一个信息,我们需要的是下面的BLOCKs:这一行的内容,之后记住后面的数值,之后输入quit退出debugfs。
退出来之后执行命令dd if=/dev/test of=/tmp/shill,txt,bk bs=4096 count=1 skip=394252
1+0 records in
1+0 records out
4096 bytes(4.1 kb)copied,0.0040552 seconds,1.0kb/s
输入完之后我们就可以查看/tmp目录下有没有,之后我们就可以查看一下/tmp,执行命令 cd /tmp/我们就可以看到我们恢复的文件了。
以上就是为您介绍的Linux删除文件夹,以及误删之后怎么恢复的全部内容,希望对你有帮助。
浏览量:3
下载量:0
时间:
我们都知道Linux下rm命令可以删除文件,但如果要删除目录的话就不能只是单纯的使用rm命令了,下面小编就给大家详细介绍下Linux如何使用命令删除和创建文件夹吧。
linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可。
直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字
删除目录、文件 rm(remove)
功能说明:删除文件或目录。
语法:rm [-dfirv][--help][--version][文件或目录。。。]
补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数”-r”,否则预设仅会删除文件。
参数:
-d或–directory 直接把欲删除的目录的硬连接数据删成0,删除该目录。
-f或–force 强制删除文件或目录。
-i或–interactive 删除既有文件或目录之前先询问用户。
-r或-R或–recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-v或–verbose 显示指令执行过程。
1 删除文件夹
de》rm -rf fileNamede》
-删除文件夹实例:
rm -rf /var/log/httpd/access
将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
需要提醒的是:使用这个rm -rf的时候一定要格外小心,linux没有回收站的
2 删除文件
de》rm -f fileNamede》
使用 rm -rf 的时候一定要格外小心,linux没有回收站的
Linux添加文件命令
创建目录:mkdir(make directories)
功能说明:建立目录
语法:mkdir [-p][--help][--version][-m 《目录属性》][目录名称]
补充说明:mkdir可建立目录并同时设置目录的权限。
参数:
-m《目录属性》或–mode《目录属性》 建立目录时同时设置目录的权限。
-p或–parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录。
例:mkdir test
创建文件 touch
功能说明:改变文件或目录时间。
语法:touch [-acfm][-d 《日期时间》][-r 《参考文件或目 录》][-t 《日期时间》] [--help] [--version][文件或目录。。。] 或 touch [-acfm][--help][--version][日期时 间][文件或目录。。。]
补充说明:使用touch指令可更改文件或目录的日期时间,包括存取时间和更改时间。
参数:
-a或–time=atime或–time=access或–time=use 只更改存取时间。
-c或–no-create 不建立任何文件。
-d《时间日期》 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m或–time=mtime或–time=modify 只更改变动时间。
-r《参考文件或目录》 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同。
-t《日期时间》 使用指定的日期时间,而非现在的时间。
例:touch test.txt (注:Linux下没有文件后缀名区分文件类型之说,系统文件类型只有可执行文件和不可执行文件)
上面就是Linux下删除和创建文件夹的命令介绍了,可以看出,命令加上一些参数其使用的效果就有所不同,所以使用的时候要谨慎选择。
浏览量:3
下载量:0
时间:
linux使用中会有很多命令需要大家知晓,对于初学者来说命令是很难掌握的,今天读文网小编跟大家纷享一下linux常用命令详细解说。
首先说一下touch 创建文件的命令,touch可以用于创建二进制文件,用法非常简单。用法:touch+文件名,touch与文件名之间一定要有空格。图中先用之前分享过的命令来查看一下/目录下面有多少文件以及文件的名字。
这里就要演示一下touch 的用法了,比如我要创建一个文件名字为abc的二进制文件,那么在linux里公式就应该写成 #touch abc 具体操作如图显示。
创建完成后,用ls命令来查看一下我们创建的文件,大家看到图中红色箭头所指的abc文件就是新创建的文件。
在说一个命令mkdir 创建文件夹,mkdir可以创建文件夹,用法非常简单,用法:mkdir+文件夹名字,mkdir与文件名之间一定要有空格。图中先用之前分享过的命令来查看一下/目录下面有多少文件以及文件的名字
这里就要演示一下mkdir 的用法了,比如我要创建一个文件名字为one的文件夹,那么在linux里公式就应该写成 #mkdir one 具体操作如图显示。
创建完成后,用ls -l命令来查看一下文件的属性,大家看到图中红色箭头所指的文件夹就是新创建的。
浏览量:2
下载量:0
时间:
现如今,人们的工作中已经离不开电脑的运用,当然电脑的运行离不开操作系统。那么,关于操作系统的一些问题,Linux中which命令怎么查找文件呢?读文网小编在这里就来告诉大家。
Linux下which命令属于查找命令,当你要查找某个文件的时候就会用到它,下面随读文网小编一起来了解下Linux下which命令的具体用法,有兴趣的朋友不妨来了解一下吧。
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
1.命令格式:
which 可执行文件名称
2.命令功能:
which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
3.命令参数:
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p 与-n参数相同,但此处的包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息
4.使用实例:
实例1:查找文件、显示命令路径
命令:
which lsmod
输出:
[root@localhost ~]# which pwd
/bin/pwd
[root@localhost ~]# which adduser
/usr/sbin/adduser
[root@localhost ~]#
说明:
which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!
实例2:用 which 去找出 which
命令:
which which
输出:
[root@localhost ~]# which which
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde’
/usr/bin/which
[root@localhost ~]#
说明:
竟然会有两个 which ,其中一个是 alias 这就是所谓的『命令别名』,意思是输入 which 会等於后面接的那串命令!
实例3:找出 cd 这个命令
命令:
which cd
输出:
说明:
cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是bash 内建的命令! 但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的!
上面就是Linux下which命令的用法介绍了,Linux下的查找命令不止which命令这一种,还有其他的命令可用于查找文件位置,不同命令其用法也略有不同。
浏览量:2
下载量:0
时间:
(一)options
-d,-depth:二者作用相同,man手册和很多博客上都说它们的作用是:首先查找当前目录文件,然后再在其子目录查找。不过我自己实验了很多次,发现没什么效果。。。烦请高人指点~
-maxdepth:指定最大目录深度,也就是指定目录的几级子目录:1代表只是指定目录本身;2表示一级子目录;3代表“孙目录”,以此类推。。。
m@meng:~/patches/tmp$ find . -maxdepth 1 -name 'onlyme*'
./onlyme
./onlyme1
m@meng:~/patches/tmp$ find . -maxdepth 2 -name 'onlyme*'
find . -maxdepth 2 -name 'onlyme*'
./test/onlyme5
./test/onlyme.sh
./onlyme
./onlyme1
-mindepth:类似上面的-maxdepth,但是指定的是最小深度。比如指
定 2,那就是只搜索深度大于2的各级子目录,而不理会小于2的那些目录(小于2的就是指定目录本身),如下例: m@meng:~/patches/tmp$ find . -mindepth 1 -name 'onlyme*'
./test/onlyme5
./test/onlyme.sh
./onlyme
./onlyme1
m@meng:~/patches/tmp$ find . -mindepth 2 -name 'onlyme*'
./test/onlyme5
./test/onlyme.sh
-help:显示帮助信息,并退出。 -mount或-xdev:如果某个(子)目录是另一个文件系统的挂载点,则跳过该目录。
-daystart:先看man手册的说法:Measure times (for -amin, -atime, -cmin, -ctime, -mmin, and -mtime) from the beginning of today rather than from24 hours ago. 看来这个选项只影响那些跟时间有关的test,而且改变了时间的计算方式,即不再从当前时刻开始计算,而是从每天的0:00开始计算。前面说过,-atime n,这个n并不代表实际的“一天”,而是指24小时;但是加上-daystart这个选项之后,就可以真的代表“一天”了,因为这时就是从每天的0:00开始计时的,看下面的例子:
m@meng:~/patches/tmp$ date
2015年 07月 12日 星期日 00:13:47 CST
m@meng:~/patches/tmp$ stat new
最近访问:2015-07-12 00:10:15.707908310 +0800
最近更改:2015-07-12 00:10:15.707908310 +0800
最近改动:2015-07-12 00:10:15.707908310 +0800
m@meng:~/patches/tmp$ stat test
最近访问:2015-07-11 23:42:25.064527595 +0800
最近更改:2015-07-06 23:57:45.095385673 +0800
最近改动:2015-07-06 23:57:45.095385673 +0800
m@meng:~/patches/tmp$ find -atime 0
.
./test
./new
m@meng:~/patches/tmp$ find -daystart -atime 0
.
./new
这就很显然了,在没有加上-daystart这个选项之前,-atime 0指的是从当前这一刻开始,往前的24小时之内,如果某个文件被访问过,则匹配;但是加上-daystart之后,-atime 0表示今天被访问过的文件才会匹配。同理-atime 1表示昨天(即7/11 0:00 ~ 7/11 23:59)被访问过的文件才会匹配。
这个选项的作用可以简单归纳为:化零为整。
(二)actions
-delete:找到匹配的文件之后,将其删除。man手册上提到:Use of -delete automatically turns on the -depth option,不过我还没搞懂这个-depth到底有什么卵用。。 -print:这个是默认的action,即没有指定任何action的时候其实就是使用了这个-print,但是指定了另一个action的时候,就必须显式加上-print才有效果。它把每个匹配的文件打印到标准输出上,每行一个文件。这意味着,-print在打印的时候,每个文件末尾添加了一个换行符。
但是这个换行符是为了浏览方便,有时会造成一些麻烦,比如使用管道的时候;如果想省略这个换行符,可以用-print0来代替,如下: m@meng:~/patches/tmp$ find -daystart -atime 0 -print
.
./new
m@meng:~/patches/tmp$ find -daystart -atime 0 -print0
../newm@meng:~/patches/tmp$
所以,如果只是想在终端观察输出,没有必要使用-print0,-print就足够了。
-print还有一个变种是-printf,类似于C语言中的printf函数,进行格式化输出,暂时不研究了,有太多格式。
-ls:类似于ls命令的-dils选项组合,如下: m@meng:~/patches/tmp$ find -daystart -atime 0 -ls
7478778 4 drwxrwxr-x 3 m m 4096 7月 12 00:10 .
7478967 0 -rw-rw-r-- 1 m m 0 7月 12 00:10 ./new
m@meng:~/patches/tmp$ ls -dils new
7478967 0 -rw-rw-r-- 1 m m 0 7月 12 00:10 new
换了一种更详细的输出而已。
f系列,即-(fls/fprint/fprint0/fprintf) file,这几个action与没有开头f的那几个action是非常相似的,只是不再把结果打印到标准输出,而是输出到文件file中。
-exec command ;与-exec command {} +
-exec本身其实只是在find执行完之后执行另一条命令,我之前以为-exec类似于管道,find找到的文件会直接被command处理,结果不是这样;若想要达到管道的效果,需要在 command后面添加“{}”,它代表前面找到的文件。
然后是语法问题:command后面没有“{}”时,必须要以一格空格和一个分号结尾;command后面有“{}”时,可以使用前面那种结尾方式,也可以使用一个空格和一个“+”结尾;
为了防止shell本身的扩展,分号需要转义,要么前面添加反斜线,要么用引号括起来;同理“{}”最好也用引号保护起来。
m@meng:~/patches/tmp$ find . -name new -print -exec cat onlyme1 ;
./new
haha
m@meng:~/patches/tmp$ find . -name new -print -exec cat onlyme1 +
find: 缺少“-exec”参数
m@meng:~/patches/tmp$ find . -name new -print -exec cat {} ;
./new
hello
m@meng:~/patches/tmp$ find . -name new -print -exec cat {} +
./new
hello
m@meng:~/patches/tmp$ find . -name new -print -exec cat {} ';'
./new
hello
m@meng:~/patches/tmp$ find . -name new -print -exec cat {} ";"
./new
hello
第一个例子说明command和find之间可以是完全独立的;第二个说明command后面没有“{}”时只能以分号结尾;后面几个例子说明了有“{}”时的结尾情况。
-execdir command ;和-execdir command {} +
与上一对选项类似,只是-exec后面的command是在当前目录执行的;而-execdir是在匹配文件所在子目录中执行的。我们使用pwd命令测试一下:m@meng:~/patches/tmp$ ls
magic.mgc new onlyme onlyme1 test
m@meng:~/patches/tmp$ ls test/
onlyme5 onlyme.sh
m@meng:~/patches/tmp$ find . -name onlyme.sh -exec pwd ;
/home/m/patches/tmp
m@meng:~/patches/tmp$ find . -name onlyme.sh -execdir pwd ;
/home/m/patches/tmp/test
文件onlyme.sh在子目录test中,find在找到它之后执行pwd命令;但是-exec和-execdir的结果是不同的。
-ok与-okdir
与-exec和-execdir是基本相同的,只是在执行之前会先询问一下用户。 -prune
if the file is a directory, do not descend into it. 就是说,如果某个目录匹配了,那么就不再进入这个目录进行搜索。m@meng:~/patches/tmp$ find . -name 'test*'
./test
./test/test1
m@meng:~/patches/tmp$ find . -name 'test*' -prune
./test
我们看到,匹配 -name ‘test*’的包括test子目录本身以及test目录下的test1文件;但是加上-prune选项之后,就不在进入到test目录中进行搜索了,因为test目录本身也是一
个匹配项。-prune经常配合-path用来排除某些子目录。
-quit
立即退出,-quit之后的命令将不再执行。如下:m@meng:~/patches/tmp$ find . -name new -print -exec cat {} ";"
./new
hello
m@meng:~/patches/tmp$ find . -name new -print -quit -exec cat {} ";"
./new
m@meng:~/patches/tmp$ find . -name new -print -exec cat {} ";" -quit
./new
hello
m@meng:~/patches/tmp$ find . -name new -quit -print -exec cat {} ";"
m@meng:~/patches/tmp$
(三)逻辑运算
先扔一段man手册的信息:
The expression is made up of options (which affect overall operation rather than the processing of a specific file, and always return true),tests
(which return a true or false value), and actions (which have side effects and return a true or false value), all separated by operators.
-and is assumed where the operator is omitted.
If the expression contains no actions other than -prune, -print is performed on all files for which the expression is true.
这就是说,expression的三个组成部分其实都是布尔表达式,而表达式都是有值的,不是true就是false。手册说,options的值永远是true;而其他两者的值可true可false。
这样,就会有逻辑运算,其实主要是test之间的运算,因为一个expression里面可以有多个test,这些test之间可以进行与、或、非运算。
比如上篇文章中的例子:
m@meng:~/patches$ find . -path ./tmp -o -name onlyme
./tmp
./tmp/onlyme
至此,find命令的基本用法完毕~好累。上面的总结肯定有不完善的地方,我会再以后慢慢补充慢慢纠正的。
浏览量:2
下载量:0
时间:
对于新手来说,经常会碰到如何移动linux系统中的文件夹之类的问题,这些命令都很简单,关键在于熟能生巧,接下来跟着读文网小编一起学习一下如何在装有linux的虚拟机中进行文件夹的移动。
第一步,打开虚拟机并启动linux系统,如下图所示。
第二步,待启动进入桌面,如下图所示(此虚拟机安装的为桌面程序包)。
第三步,同时按住Ctrl+Alt+F2,进入代码控制界面,如下图所示。
第四步,此时,在login输入root(超级用户,拥有最高管理权限),密码为自己设定的密码(输密码时没有任何显示),显示“#”即为登录成功,如下图所示
第五步,在系统文件夹tmp中创建一个“123.txt”文件(mkdir为新建命令),如下图所示的命令。
第六步,从tmp中移动“123.txt”这个文件到etc文件夹中(mv为移动命令),如下图所示的命令。
第七步,进入到系统文件夹etc中查看是否已经移动成功(ls为显示此目录的文件命令),如下图所示。
文件已经创建移动成功,主要命令有以下几个:ls(显示所有文件),mv(移动),mkdir(创建)。
linux的文件夹相关
浏览量:2
下载量:0
时间:
Linux下whereis命令和find命令有点相似,whereis命令查找速度更快,但只能查找程序名,下面随读文网小编一起来了解下whereis命令的具体用法吧。
whereis命令只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。
实例1:将和**文件相关的文件都查找出来
命令:
whereis svn
输出:
[root@localhost ~]# whereis tomcat
tomcat:
[root@localhost ~]# whereis svn
svn: /usr/bin/svn /usr/local/svn /usr/share/man/man1/svn.1.gz
说明:
tomcat没安装,找不出来,svn安装找出了很多相关文件
实例2:只将二进制文件 查找出来
命令:
whereis -b svn
输出:
[root@localhost ~]# whereis -b svn
svn: /usr/bin/svn /usr/local/svn
[root@localhost ~]# whereis -m svn
svn: /usr/share/man/man1/svn.1.gz
[root@localhost ~]# whereis -s svn
svn:
[root@localhost ~]#
说明:
whereis -m svn 查出说明文档路径,whereis -s svn 找source源文件。
上面就是Linux下whereis命令的用法介绍了,whereis命令搜索的条件比较局限,如果你只搜索程序名的话,使用whereis命令是非常快的。
浏览量:2
下载量:0
时间:
我们都知道Linux下查找文件的命令是find命令,运用该命令可以很快的搜到自己想要的文件,那么find命令有哪些使用技巧呢?下面小编就给大家介绍下Linux中find命令的巧妙运用。
find命令的工作方式是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。
代码如下:
[root@localhost tmp]# find 。 -type f -perm 644
#查找当前目录权限为644的文件
[root@localhost tmp]# find 。 -type f -user reed
#查找当前目录文件所有者为reed的文件
浏览量:2
下载量:0
时间: